fix(topics): head the list with a fixed new entry, and delete untitled rows (index.html, main.ts, styles.css, docs) - #126
Conversation
…d rows (index.html, main.ts, styles.css, docs) 起動しただけで一言も発しなかった回が、索引に題の無い項目を残していた。その行は ❌ を持たないため画面から消せず、起動のたびに増える。一覧の作りと、題の無い行の扱いの両方を直す。 - 索引に無い現在のトピックを行として描かない(決定1)。`renderTopics` が一覧の先頭へ足していた架空の行をやめ、代わりに一覧の先頭へ固定の「新規」を置く。あの行は「名前の無いトピック」を名乗っていたが、実際には誰も始めていない会話であり、しかも索引に無い以上そこから消すものも持たなかった。「新規」は本当のこと——新しいトピックが始まる場所——を言う。 - 「新規」は `<ol>` の外に立てる。一覧は索引から描き直されるため、索引の行ではないものをその中に置けば毎回消える。索引が空でも「新規」は在る。 - 部屋が索引に無いトピックに居る間、「新規」は選択状態で描く(AI 判断4)。そうしないと、自分の居る場所が一覧のどこにも無い状態になり、架空の行が避けていた問題が形を変えて戻る。形は行の選択状態と同じ——枠のある窓の地の箱である。 - 索引に在る題の無い行にも ❌ を付ける(決定2)。#119 決定5 の理由は「そう読まれる二つの行は、どちらもここから消す理由が無い」であり、その片方は決定1 が一覧から外した。残るのはファイルの無い孤児(#117)と、発言が無いまま席の記録で実体化した行であり、どちらも消したい行である。決定5 は覆すのではなく、前提が外れる。 - 題の無い行は画面上「未記入」と呼ぶ(AI 判断3)。行の表示、削除の確認ダイアログ、削除後の状況行、開いたときの状況行、❌ の読み上げが同じ語を差し込み、「トピック「」を削除します。」を出さない。名前を直す欄は空のままである——「未記入」は空の題について画面が言う語であって、題ではない。 - 「新規」を見出しの隣から一覧の先頭へ移したため、`#history .panel-head button` の規則は `#history .new` になった。作る操作はそれが現れるリストの隣に置く(#59)という判断は残っている。 索引へいつ書くかは変えていない。`record_session` がトピックを実体化する理由(id が起動を越えて残らなければ resume の意味が無い)は正当であり、そのままである。直したのは行の見せ方と消し方だけである。 要求仕様の「トピック」「トピックの一覧」「実装済み」を、この二つの決定に合わせて書き替えた。 Closes #125 Co-authored-by: Claude Lin & Lay <eightborder@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
smileygames
left a comment
There was a problem hiding this comment.
AI セルフレビュー(execution_mode = auto、#125 に対して)。
受け入れ基準
本文の決定と AI 判断を一つずつ diff で確認した。すべて満たしている。
- 決定1(未実体トピックを行として描かない) —
renderTopicsのlisted.unshift(...)が消え、代わりにtopicNewEl.classList.toggle("current", ...)になっている。新規は.panel-headから出て<ol>の外に置かれた。索引から描き直されても消えない位置であり、索引が空でも残る。 - 決定2(題の無い行も消せる) —
row.appendChild(deleteButton(topic))が無条件になった。決定1 で架空の行が一覧から出た後なので、ここに来る行はすべて索引の行である。前提が変わったことを利用しており、決定5 を単独で覆してはいない。 - AI 判断3(「未記入」) —
topicName()に一本化され、行の表示・❌ のtitleとaria-label・開いたときの状況行・削除ダイアログ・削除後の状況行の五箇所が同じ語を差し込む。「トピック「」を削除します。」は出ない。既存の「未命名」も同時に「未記入」へ寄せてある。 - AI 判断4(
新規の選択状態) —renderTopicsが毎回 toggle する。描く側が一本なので、一覧と新規が食い違う経路が無い。
改名だけは topicName() を通していない。空の題の行で改名を始めると空の欄が開く。これは正しい——「未記入」は画面の語であって題ではなく、既定値として差し込めば語そのものが題になってしまう。判断として支持する。
逸脱
なし。変更は 4 ファイル(index.html / src/main.ts / src/styles.css / docs/0-requirements.md)で、本文の target files の範囲内。Rust には触れていない——本文の制約「実体化そのものは外さない。直すのは行の見せ方と消し方」に沿っている。
.unnamed の CSS は topicRow が今も付けており、死んだ規則にはなっていない。
docs
docs/0-requirements.md に二点入っている。「発言が無くても、席がそこで始まれば索引に入る」という段落(今回の不具合の発生源そのものの記述)と、決定5 を「前提が外れる」形へ書き替えた段落。実装と同じ PR に入っている。
CI
check / CI ともに success(8755486)。mergeStateStatus = CLEAN。
版数
patch。画面から観測できる変化ではあるが、規模は限定的で「大きな構造変更」ではない。
未確認として残るもの
実装者は使い捨ての vite server(5199、1420 ではない)で見た目を確認しているが、Tauri アプリとしての実機確認は未了。特に 新規 の選択状態と、題の無い行の ❌ から削除まで通す経路は実機で押していない。実機確認はマージの門ではないため止めない。
次: 自己レビュー通過につき、auto モードの直接マージへ進む。
Closes #125
索引に無い現在のトピックを行として描くのをやめ、一覧の先頭に固定の「新規」を置いた(決定1)。部屋がそのトピックに居る間、「新規」は選択状態で描く(AI 判断4)。
索引に在る題の無い行にも ❌ を付けた(決定2)。#119 決定5 の前提だった「消す理由の無い二つの行」の片方が決定1 で一覧から外れたため、残るのは #117 の孤児と、席の記録で実体化した行だけになる。画面はそれを「未記入」と呼び、確認ダイアログや状況行の差し込みにも同じ語を使う(AI 判断3)。
索引へいつ書くかは変えていない。
record_sessionによる実体化はそのままであり、変えたのは行の見せ方と消し方だけである。